# -*- coding: utf-8 -*-
from match import Extractor, os
import regex as re

# 自首、立功、坦白（所有罪名）
# 被害人过错（盗窃罪、抢劫罪、故意伤害罪）
# 特殊情节（诈骗罪）

class ZiShouExtractor(Extractor):

    # 自首适用于所有罪名，所以直接返回True
    @staticmethod
    def is_my_job(file_path):
        return True

    @staticmethod
    def extract(text):
        result = {}
        have_zi_shou = re.search(r"((?<!无|不属|并非|不构成|不符合|不认定|不能认定为)自首)", text) is not None
        result["自首"] = int(have_zi_shou)
        if result["自首"] == 0:
            result["自首"] += 2
        return result

class LiGongExtractor(Extractor):

    # 立功适用于所有罪名，所以直接返回True
    @staticmethod
    def is_my_job(file_path):
        return True

    @staticmethod
    def extract(text):
        result = {}
        have_li_gong = re.search(r"((?<!不构成|不成立|无自首|不应认定为|不能认定有|不能认定为有|不能认定其具有)立功(?!不|情节不当|表现的上诉理由不能成立))",
                                 text) is not None
        result["立功"] = int(have_li_gong)
        if result["立功"] == 0:
            result["立功"] += 2
        return result

class TanBaiExtractor(Extractor):

    # 坦白适用于所有罪名，所以直接返回True
    @staticmethod
    def is_my_job(file_path):
        return True

    @staticmethod
    def extract(text):
        result = {}
        have_tan_bai = re.search(r"((?<!不符合|不构成|不具有|不能认定为)坦白(?!不当))",
                                 text) is not None
        result["tanbai"] = int(have_tan_bai)
        if result["tanbai"] == 0:
            result["tanbai"] += 2
        return result

class TeShuQingJieExtractor(Extractor):

    # 特殊情节适用于诈骗罪
    @staticmethod
    def is_my_job(file_path):
        if os.path.basename(file_path) == '诈骗罪.json':
            return True
        else:
            return False

    @staticmethod
    def extract(text):
        result = {}
        te_shu_qing_jie = list(set(re.findall(r"(抢险|救灾|募捐|首要分子|未分赃|分赃较少|诈骗近亲属|自杀)", text)))
        result["特殊情节"] = te_shu_qing_jie
        return result

class ZhuGuanEXingExtractor(Extractor):

    # 主观恶性（程度）适用于抢劫罪
    @staticmethod
    def is_my_job(file_path):
        if os.path.basename(file_path) == '抢劫罪.json':
            return True
        else:
            return False

    @staticmethod
    def extract(text):
        result = {}
        zhu_guan_e_xing = list(set(re.findall(r"(入户|公共交通|抢劫银行|证券|运钞车)", text)))
        result["主观恶性"] = zhu_guan_e_xing
        return result

if __name__ == '__main__':
    print(ZiShouExtractor.extract("构成自首"))
    print(LiGongExtractor.extract("具备立功情节"))
    print(TanBaiExtractor.extract("上诉人廖开权是否具有坦白情节"))
    print(TeShuQingJieExtractor.extract("经查，邓钊浩、黄镇业对许某实施了诈骗行为，并导致许某自杀死亡"))
    print(ZhuGuanEXingExtractor.extract("上诉人韦江湖以非法占有为目的，深夜入户抢夺他人财物，数额较大"))